package com.southminority.ethnic.service.contact;

import com.southminority.ethnic.controller.contact.vo.CooperationFileVO;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 合作申请文件服务接口
 * 
 * @author SouthMinority
 */
public interface CooperationFileService {

    /**
     * 获取可用文件列表（前端）
     * @return 可用文件列表
     */
    List<CooperationFileVO> getActiveFiles();

    /**
     * 获取默认文件
     * @return 默认文件
     */
    CooperationFileVO getDefaultFile();

    /**
     * 根据文件类型获取文件列表
     * @param fileType 文件类型
     * @return 文件列表
     */
    List<CooperationFileVO> getFilesByType(String fileType);

    /**
     * 获取文件详情（前端）
     * @param id 文件ID
     * @return 文件详情
     */
    CooperationFileVO getFileDetail(Long id);

    /**
     * 下载文件
     * @param id 文件ID
     * @param request HTTP请求
     * @param response HTTP响应
     */
    void downloadFile(Long id, HttpServletRequest request, HttpServletResponse response);

    /**
     * 增加下载次数
     * @param id 文件ID
     */
    void incrementDownloadCount(Long id);

    /**
     * 获取所有文件列表（管理端）
     * @return 所有文件列表
     */
    List<CooperationFileVO> getAllFiles();

    /**
     * 获取文件详情（管理端）
     * @param id 文件ID
     * @return 文件详情
     */
    CooperationFileVO getFileDetailAdmin(Long id);

    /**
     * 上传文件
     * @param file 文件
     * @param title 标题
     * @param description 描述
     * @param version 版本
     * @param isDefault 是否为默认文件
     * @return 上传后的文件信息
     */
    CooperationFileVO uploadFile(MultipartFile file, String title, String description, String version, Boolean isDefault);

    /**
     * 更新文件信息
     * @param id 文件ID
     * @param fileVO 文件信息
     * @return 更新后的文件信息
     */
    CooperationFileVO updateFile(Long id, CooperationFileVO fileVO);

    /**
     * 删除文件
     * @param id 文件ID
     * @return 是否删除成功
     */
    boolean deleteFile(Long id);

    /**
     * 批量删除文件
     * @param ids 文件ID列表
     * @return 删除成功的数量
     */
    int batchDeleteFiles(List<Long> ids);

    /**
     * 设置/取消默认文件
     * @param id 文件ID
     * @param isDefault 是否设为默认
     * @return 是否设置成功
     */
    boolean setDefaultFile(Long id, boolean isDefault);

    /**
     * 更新文件状态
     * @param id 文件ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateFileStatus(Long id, Integer status);
    

}
